package jdk_interface;

import java.util.Arrays;

/**
 * @author yuisama
 * @date 2022/09/18 20:07
 **/
public class Test {
    public static void main(String[] args) {
        // 数组有个工具类Arrays.sort(数组对象) 排序，默认排升序
//        int[] data = new int[] {1,6,4,2,3,9,8,7,5};
//        // 调用JDK的默认排序方法，默认升序排序
//        Arrays.sort(data);
//        System.out.println(Arrays.toString(data));
//        Student stu1 = new Student("铭哥",80);
//        Student stu2 = new Student("超哥",90);
//        // 返回-1
//        System.out.println(stu1.compareTo(stu2));
//        String str = "hello world";
//        System.out.println(stu1.compareTo(str));
        // 创建了一个对象数组
        Student[] students = new Student[4];
        students[1] = new Student("铭哥",90);
        students[0] = new Student("徐轩",80);
        students[2] = new Student("超哥",60);
        students[3] = new Student("鲍老师",100);
        System.out.println("排序之前的数组");
        for (Student stu : students) {
            stu.showStu();
        }
        // 我想现在根据每个学生的成绩进行排序，按照分数升序排序！
        // 如何让排序按照降序排序？
        sort(students);
        System.out.println("------------------------------------");
        System.out.println("排序之后的数组");
        for (Student stu : students) {
            stu.showStu();
        }
    }

    /**
     * 调用sort方法时，不知道也不关心具体的子类是什么类型，只要子类实现了Comparable接口
     * 都可以调用sort方法！
     * 这就是向上转型的参数统一化
     * @param arr
     */
    public static void sort(Comparable[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            boolean isSwaped = false;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j].compareTo(arr[j + 1]) > 0) {
                    Comparable tmp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = tmp;
                    isSwaped = true;
                }
            }
            // 内层没有元素交换，整个区间已经有序
            if (!isSwaped) {
                break;
            }
        }
    }
}